Large-scale, complex computer systems, are brought into use through integration of software programs with a hardware platform. Simply put, the software program is a detailed plan or procedure for solving a problem, that is executed on a hardware platform. The hardware platform includes a microprocessor or microprocessors and associated support circuits such as electronic memory (such as random-access-memory or RAM, hard disk memory, or card memory) and input/output port circuits so that information can be passed between components of the system and users.
A telecommunication network is an example of such a complex system. Telecommunication networks facilitate communications between a large number of public and private communications systems by providing numerous functions such as switching, accounting, and time management. A telecommunications network provides these functions through network switches, or nodes, interconnected by links, or channels, of transmission media such as wire, fiber-optic cable, or radio waves. Some of the nodes are connected to one or more users.
Modern telecommunication networks require complex, automated switching and, to that end, software programs are written to increase switching efficiency in telecommunications systems, along with implementing service features and functions (for example, call waiting and caller id). A computer language for implementing such software programs is "Java." Java was introduced by Sun Microsystems, Inc., of Palo Alto, Calif., and has been described as a simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic computer language.
As with most software programs, a Java software program undergoes a debugging process to eliminate errors or malfunctions, also known as bugs, in the "detailed plan" or "procedure" for solving a problem. In this example, the problem solved is telephone network switching.
It is common for extensive debugging procedures to be conducted on a software package before it is installed on hardware platforms in the field. Nevertheless, some software bugs arise in a real-world environment because not all of the real-world contingencies can be simulated in a testing environment. Rarely are large-scale software systems, such as telecommunications software, without some errors that escaped product development testing. Such bugs may arise or be revealed within a short time of installation, or only after a period of time sufficient for operational conditions to reveal or cause a bug to appear.
While most switches are capable of loading a new Java software upgrade without stopping to correct and replace defective software, such loading of new software may result in undesirable effects and, furthermore, may not be feasible in many situations, such as during busy-hour processing, when a system may not have sufficient bandwidth to provide telephony service and simultaneously engage in a Java software upgrade. In such a case, the act of correcting the software bug may result in a worse service outage than resulted by the software bug itself. Telephone customers may then have to suffer with the bug until a suitable maintenance window becomes available to perform a wholesale software upgrade. Such a situation, however, is not acceptable because telephone switches which rely on the software are expected to experience no more than three minutes of downtime per year.
Alternatively, conventional patching techniques may be used to correct defective software without having a large impact on the performance or workload of the system. Such patching techniques, however, are limited to correcting relatively minor software defects.
While there are drawbacks associated with software corrective techniques, such as the aforementioned loading and/or patching of software without stopping, such techniques are not even available with most large-scale complex computer systems outside of the telecommunications industry.
Accordingly, a continuing search has been directed to the development of methods by which a defective software program may be corrected or modified without stopping the program, and without degrading the performance or workload capacity of the system controlled by the program. Such a continuing search has been further directed to a method by which a defective software program may be corrected or modified without requiring the wholesale installation and/or upgrade of a software application program and the associated labor costs, even if the program must be stopped.